package com.syf.model;

import com.syf.enums.OrderDirection;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.math.BigDecimal;

/**
 * 【4】委托单EntrustOrder -》 交易订单Order (要交易对订单)
 *      委托价格:
 *          委托100个数量金币，10元价格一个： 卖出3个、卖出10个、卖出8个...交易一次就产生一个Order
 */
@Data
@NoArgsConstructor
public class Order implements Serializable {

    /**
     * 本次订单的Id
     */
    private String orderId;

    /**
     * 用户/会员Id
     */
    private Long userId;

    /**
     * 支持的币币交易对【线程处理对象】   某一个 symbol交易对的 所有委托单
     */
    private String symbol;

    /**
     * 委托--买入或卖出量
     */
    private BigDecimal amount = BigDecimal.ZERO;

    /**
     * 总的成交量
     */
    private BigDecimal tradedAmount = BigDecimal.ZERO;

    /**
     * 总的成交额
     */
    private BigDecimal turnover = BigDecimal.ZERO;

    /**
     * 币单位
     */
    private String coinSymbol;

    /**
     * 结算单位
     */
    private String baseSymbol;

    /**
     * 订单状态
     */
    private Integer orderStatus;

    /**
     * 订单的方向【买入/卖出】
     */
    private OrderDirection orderDirection;

    /**
     * 挂单的价格
     */
    private BigDecimal price = BigDecimal.ZERO;

    /**
     * 挂单时间
     */
    private Long time;

    /**
     * 交易完成时间
     */
    private Long completedTime;

    /**
     * 交易取消时间
     */
    private Long cancelTime;


    private boolean isCancelOrder ; //该请求 是否撤销委托订单操作

    /**
     * 已经成功的水平订单
     */
    //private List<OrderDetail> details;


    /**
     * 订单是否完成的判断依据
     *
     * @return
     */
    public boolean isCompleted() {
        return amount.compareTo(tradedAmount) <= 0;
    }
}
